Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / feature / node / src / commonTest / kotlin / org / meshtastic / feature / node / component / BuildNodeDescriptionTest.kt

Displaying Raw • Download

feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/component/BuildNodeDescriptionTest.kt a6057f594dee69b0cbfbe7ce662a7d4d53c62f65 (a6057f59) Text, 5.43 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.node.component

Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertContains
Tff7b72import T7ee787kotlin.test.assertFalse
Tff7b72import T7ee787kotlin.test.assertTrue

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72class T56d364BuildNodeDescriptionTest Tb4b4b4{

Tff7b72private Tff7b72val Te6edf3testStrings Tff7b72=
Te6edf3NodeDescriptionStringsTb4b4b4(
Te6edf3online Tff7b72= Ta5d6ff"Ta5d6ffonlineTa5d6ff"Tb4b4b4,
Te6edf3offline Tff7b72= Ta5d6ff"Ta5d6ffofflineTa5d6ff"Tb4b4b4,
Te6edf3favorite Tff7b72= Ta5d6ff"Ta5d6fffavoriteTa5d6ff"Tb4b4b4,
Te6edf3lastHeard Tff7b72= Ta5d6ff"Ta5d6fflast heard %sTa5d6ff"Tb4b4b4,
Te6edf3role Tff7b72= Ta5d6ff"Ta5d6ffrole %sTa5d6ff"Tb4b4b4,
Te6edf3hopsAway Tff7b72= Ta5d6ff"Ta5d6ff0 hops awayTa5d6ff"Tb4b4b4,
Te6edf3battery Tff7b72= Ta5d6ff"Ta5d6ffbattery 0%Ta5d6ff"Tb4b4b4,
Te6edf3distanceAway Tff7b72= Ta5d6ff"Ta5d6ff%s awayTa5d6ff"Tb4b4b4,
Te6edf3signal Tff7b72= Ta5d6ff"Ta5d6ffsignal %sTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffdescribeTb4b4b4(
Te6edf3nameTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ffTestNodeTa5d6ff"Tb4b4b4,
Te6edf3isOnlineTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3isFavoriteTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3lastHeardTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3roleTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ffCLIENTTa5d6ff"Tb4b4b4,
Te6edf3hopsAwayTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3batteryLevelTb4b4b4: Tffa657Int? Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3distanceTb4b4b4: Tffa657String? Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3snrTb4b4b4: Tffa657Float Tff7b72= Tffa657FloatTb4b4b4.Te6edf3MAX_VALUETb4b4b4,
Te6edf3rssiTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3viaMqttTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3lastHeardIsRelativeTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Te6edf3buildNodeDescriptionTb4b4b4(
Te6edf3name Tff7b72= Te6edf3nameTb4b4b4,
Te6edf3isOnline Tff7b72= Te6edf3isOnlineTb4b4b4,
Te6edf3isFavorite Tff7b72= Te6edf3isFavoriteTb4b4b4,
Te6edf3lastHeard Tff7b72= Te6edf3lastHeardTb4b4b4,
Te6edf3role Tff7b72= Te6edf3roleTb4b4b4,
Te6edf3hopsAway Tff7b72= Te6edf3hopsAwayTb4b4b4,
Te6edf3batteryLevel Tff7b72= Te6edf3batteryLevelTb4b4b4,
Te6edf3distance Tff7b72= Te6edf3distanceTb4b4b4,
Te6edf3snr Tff7b72= Te6edf3snrTb4b4b4,
Te6edf3rssi Tff7b72= Te6edf3rssiTb4b4b4,
Te6edf3viaMqtt Tff7b72= Te6edf3viaMqttTb4b4b4,
Te6edf3strings Tff7b72= Te6edf3testStringsTb4b4b4,
Te6edf3lastHeardIsRelative Tff7b72= Te6edf3lastHeardIsRelativeTb4b4b4,
Tb4b4b4)

T8b949e// ---- Basic output ----

Tf0883e@Test
Tff7b72fun Td2a8ffincludes_name_and_online_statusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffAlphaTa5d6ff"Tb4b4b4, Te6edf3isOnline Tff7b72= Tff7b72trueTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"Ta5d6ffAlpha, onlineTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffincludes_offline_when_not_onlineTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3isOnline Tff7b72= Tff7b72falseTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffofflineTa5d6ff"Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffincludes_favorite_when_flaggedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3isFavorite Tff7b72= Tff7b72trueTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6fffavoriteTa5d6ff"Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffomits_favorite_when_not_flaggedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3isFavorite Tff7b72= Tff7b72falseTb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6fffavoriteTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

T8b949e// ---- Last heard ----

Tf0883e@Test
Tff7b72fun Td2a8ffomits_last_heard_when_zeroTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3lastHeard Tff7b72= T79c0ff0Tb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6fflast heardTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

T8b949e// Note: lastHeard > 0 tests require DateFormatter/Compose Resources initialization
T8b949e// which is not available in headless JVM unit tests. The relative vs absolute time
T8b949e// formatting is tested indirectly through integration/screenshot tests.

T8b949e// ---- Hops ----

Tf0883e@Test
Tff7b72fun Td2a8ffincludes_hops_when_positiveTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3hopsAway Tff7b72= T79c0ff3Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff3 hops awayTa5d6ff"Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffomits_hops_when_zeroTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3hopsAway Tff7b72= T79c0ff0Tb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

T8b949e// ---- Battery ----

Tf0883e@Test
Tff7b72fun Td2a8ffincludes_battery_when_in_valid_rangeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3batteryLevel Tff7b72= T79c0ff7T79c0ff5Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffbattery 75%Ta5d6ff"Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffomits_battery_when_zeroTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3batteryLevel Tff7b72= T79c0ff0Tb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffbatteryTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffomits_battery_when_over_100Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3batteryLevel Tff7b72= T79c0ff1T79c0ff0T79c0ff1Tb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffbatteryTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffomits_battery_when_nullTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3batteryLevel Tff7b72= Tff7b72nullTb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffbatteryTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

T8b949e// ---- Distance ----

Tf0883e@Test
Tff7b72fun Td2a8ffincludes_distance_when_providedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3distance Tff7b72= Ta5d6ff"Ta5d6ff2.5 kmTa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff2.5 km awayTa5d6ff"Tb4b4b4)
Tb4b4b4}

T8b949e// ---- Signal ----

Tf0883e@Test
Tff7b72fun Td2a8ffsignal_hidden_when_snr_is_max_floatTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3snr Tff7b72= Tffa657FloatTb4b4b4.Te6edf3MAX_VALUETb4b4b4, Te6edf3rssi Tff7b72= Tff7b72-T79c0ff1T79c0ff0T79c0ff0Tb4b4b4, Te6edf3hopsAway Tff7b72= T79c0ff0Tb4b4b4, Te6edf3viaMqtt Tff7b72= Tff7b72falseTb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffsignalTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffsignal_hidden_when_via_mqttTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3snr Tff7b72= Tff7b72-T79c0ff5fTb4b4b4, Te6edf3rssi Tff7b72= Tff7b72-T79c0ff1T79c0ff0T79c0ff0Tb4b4b4, Te6edf3hopsAway Tff7b72= T79c0ff0Tb4b4b4, Te6edf3viaMqtt Tff7b72= Tff7b72trueTb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffsignalTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffsignal_hidden_when_hops_greater_than_zeroTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3snr Tff7b72= Tff7b72-T79c0ff5fTb4b4b4, Te6edf3rssi Tff7b72= Tff7b72-T79c0ff1T79c0ff0T79c0ff0Tb4b4b4, Te6edf3hopsAway Tff7b72= T79c0ff1Tb4b4b4, Te6edf3viaMqtt Tff7b72= Tff7b72falseTb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffsignalTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffsignal_hidden_when_rssi_not_negativeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3snr Tff7b72= Tff7b72-T79c0ff5fTb4b4b4, Te6edf3rssi Tff7b72= T79c0ff0Tb4b4b4, Te6edf3hopsAway Tff7b72= T79c0ff0Tb4b4b4, Te6edf3viaMqtt Tff7b72= Tff7b72falseTb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffsignalTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffsignal_shown_when_direct_and_valid_valuesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3describeTb4b4b4(Te6edf3snr Tff7b72= Tff7b72-T79c0ff5fTb4b4b4, Te6edf3rssi Tff7b72= Tff7b72-T79c0ff1T79c0ff0T79c0ff0Tb4b4b4, Te6edf3hopsAway Tff7b72= T79c0ff0Tb4b4b4, Te6edf3viaMqtt Tff7b72= Tff7b72falseTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffsignalTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.1s